package com.example.flowable.local;

import com.example.FlowableLocalDb;
import freemarker.template.SimpleDate;
import liquibase.pro.packaged.hi;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.repository.ProcessDefinition;
import org.junit.jupiter.api.Test;
import sun.rmi.transport.ObjectTable;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 流程任务
 *
 * @author wsl
 */
public class ProFlowable extends FlowableLocalDb {

    //1、启动一个流程实例
    @Test
    public void startProcess() {
//        Map<String, Object> variables = new HashMap<>();
//        variables.put("day",3);
        processEngine.getRuntimeService()
                .startProcessInstanceByKey("Hliday");
    }

    //2、挂起或激活一个流程
    @Test
    public void testProcessDefinitionSuspended() {
        RepositoryService repositoryService = processEngine.getRepositoryService();
        ProcessDefinition hliday = repositoryService
                .createProcessDefinitionQuery()
                .processDefinitionKey("Hliday")
                .singleResult();
        boolean suspended = hliday.isSuspended();
        if(suspended){
            System.out.println("激活流程定义：" + hliday.getName());
            //激活一个流程定义，但是不会激活已挂起挂起的流程实例.
            repositoryService.activateProcessDefinitionById(hliday.getId());
            //激活一个流程定义，并激活其所有的流程实例，指定激活的时间，如果为null则是立即执行（需要作业执行器）。
//            repositoryService.activateProcessDefinitionById(hliday.getId(),true,null);
        }else{
            System.out.println("挂起流程定义：" + hliday.getName());
            //挂起一个流程定义，已有的流程实例不会受影响，但不能再创建新的流程实例。
//            repositoryService.suspendProcessDefinitionById(hliday.getId());
            //挂起一个流程定义，并挂起其现有的所有实例，且不能再创建新的流程实例，在指定的时间执行（为null即立即执行，需要作业执行器）。
            repositoryService.suspendProcessDefinitionById(hliday.getId(),true,null);
        }
    }

    @Test
    public void testProcessInstanceSuspended() {

    }

    public static void main(String[] args) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(format.format(new Date(2022, Calendar.OCTOBER, 1)));
    }
}
